package com.pis.persistence;

import com.mysql.jdbc.PreparedStatement;
import java.util.List;

import com.pis.model.Funcionario;
import com.pis.model.Pessoa;
import com.pis.util.DataBaseConnection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

public class FuncionarioDAO implements IFuncionarioDAO{

	@Override
	public boolean add(Funcionario t) {
		
            String sql="";
            PessoaDAO pdao = new PessoaDAO();
            pdao.add(t.getPessoa());
            Pessoa p = pdao.getByCpf(t.getPessoa().getCpf());
            sql = "INSERT INTO pis.Funcionario (Cargo, Pessoa_CPF) VALUES ('"+t.getCargo()+"', '"+p.getCpf()+"')";
        try {
            if(DataBaseConnection.UpdateDB(sql)>0) return true;
        } catch (Exception ex) {
            Logger.getLogger(FuncionarioDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
            return false;
	}

	@Override
	public boolean edit(Funcionario _new, Funcionario _old) {
		String sql="update Funcionario set cargo='"+_new.getCargo()+"', pessoa_cpf='"+_new.getPessoa().getCpf()+"' where pessoa_cpf='"+_old.getPessoa().getCpf()+"'";
                try {
                   
                    if(DataBaseConnection.UpdateDB(sql)>0) return true;
                } catch (Exception ex) {
                    Logger.getLogger(FuncionarioDAO.class.getName()).log(Level.SEVERE, null, ex);
                }
                return false;
		
	}

	@Override
	public boolean del(Funcionario t) {
            try {
                String sql = "delete from Funcionario where pessoa_cpf='"+t.getPessoa().getCpf()+"'";
                if(DataBaseConnection.UpdateDB(sql)>0) return true;
                
            } catch (Exception ex) {
                Logger.getLogger(FuncionarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            }
            return false;
	}

	@Override
	public List<Funcionario> findAll() {
        try {
            String sql  = "select * from Funcionario F, Pessoa P where F.pessoa_cpf=P.cpf";
            ResultSet rs = DataBaseConnection.getQuery(sql);
            ArrayList<Funcionario> lista = new ArrayList<Funcionario>();
            while(rs.next()){
                Funcionario func = new Funcionario();
                Pessoa pessoa    = new Pessoa();
                func.setCargo(rs.getString("cargo"));
                pessoa.setCpf(rs.getString("cpf"));
                pessoa.setData_nascimento(rs.getString("dataNascimento"));
                pessoa.setNome(rs.getString("nome"));
                pessoa.setTelefone(rs.getString("telefone"));
                func.setPessoa(pessoa);
                lista.add(func);
            }
            return lista;
        } catch (Exception ex) {
            Logger.getLogger(FuncionarioDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
            return null;
	}

	@Override
	public Funcionario getByID(int id) {
		// TODO Auto-generated method stub
		return null;
	}
        public Funcionario getByCPF(String cpf){
        try {
            String sql = "select * from Funcionario F, Pessoa P where F.pessoa_cpf=P.cpf and F.pessoa_cpf='"+cpf+"'";
            Funcionario func = null;
            ResultSet rs = DataBaseConnection.getQuery(sql);
            if(rs.next()){
                func = new Funcionario();
                Pessoa pessoa = new Pessoa();
                func.setCargo(rs.getString("cargo"));
                pessoa.setCpf(rs.getString("cpf"));
                pessoa.setData_nascimento(rs.getString("dataNascimento"));
                pessoa.setNome(rs.getString("nome"));
                pessoa.setTelefone(rs.getString("telefone"));
                func.setPessoa(pessoa);
            }
            return func;
        } catch (Exception ex) {
            Logger.getLogger(FuncionarioDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
        }

}
